1.- Describiendo las misiones Kepler y K2


Kepler es decima mision espacial perteneciente al programa Discovery de la NASA, pero independiente a los propositos generales de esta, que fue lanzada el 7 de marzo de 2009 con un presupuesto de 550 millones de dolares. El objetivo de la misión Kepler es detectar planetas extrasolares, poniendo enfasis en planetas rocosos con tamaños similares, mediante el análisis de curvas de luz de estrellas. Kepler ha encontrado hasta la fecha 2329 planetas extrasolares en 1647 estrellas y 9 de estos planetas están en las zonas habitables de sus estrellas.

KOI (Kepler Object of Interest / Objetos de Interes de Kepler) son estrellas que fueron observadas por el satélite Kepler, que son de interes para continuar observándose, ya que probablemente posean planetas en órbitas.

KIC (Kepler Input Catalog / Catálogo en Entrada de Kepler) es una base de datos de cerca de 13,2 millones de estrellas las cuales Kepler puede observar, si la estrella presenta indicios de algun tránsito, entonces, se clasifica como un KOI.

La misión K2 entró en funcionamiento en junio de 2014 como respuesta a los desperfectos que tuvo la nave de la misión Kepler en dos de sus ruedas de reacción. Está destinada a hacer observaciones en el plano de la eclíptica.

EPIC (K2 Ecliptic Plane Input Catalog / Catálogo de entrada en el Plano de la Eclítica de K2) es un catálogo análogo a lo que era KOI para la misión Kepler. El propósito principal del catálogo es definir aperturas fotométricas para cada objetivo potencial proporcionando posiciones celestes y magnitudes de pasabanda Kepler.

Fuentes:

http://keplerscience.arc.nasa.gov/K2/ProposeTargets.shtml

https://keplerscience.arc.nasa.gov/objectives.html

http://www.nasa.gov/centers/ames/spanish/research/exploringtheuniverse/exploringtheuniverse-kepler.html

https://en.wikipedia.org/wiki/Kepler_Input_Catalog

http://www.publico.es/ciencias/mision-kepler-nasa-anuncia-descubrimiento.html

https://en.wikipedia.org/wiki/Kepler_object_of_interest

2.- Obteniendo curvas de luz


Para obtener las curvas de luz se usó el módulo kplr


In [1]:
import kplr
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
client = kplr.API()

star1 = client.star(2305930)

curva1 = star1.get_light_curves(short_cadence=False)

time1, flux1, ferr1, quality1 = [], [], [], []

for lc in curva1:
    with lc.open() as f:
        hdu_data = f[1].data
        times1 = hdu_data["time"]
        pdc_fluxes1 = hdu_data["pdcsap_flux"]
        qualities1 = hdu_data["sap_quality"]
        #quitamos los elementos que sean "nan"
        idx = np.isnan(pdc_fluxes1)
        time1.append(times1[~idx])
        flux1.append(pdc_fluxes1[~idx])
        quality1.append(qualities1[~idx])

ejex1 = np.array([])
ejey1 = np.array([])

for i in range(len(time1)):
    ejex1 = np.append(ejex1,time1[i])
    ejey1 = np.append(ejey1,flux1[i])

sumaprom = 0
numprom = 0
uind = 0
suma = 0
prom = 0
dif = 0

#determinamos el pormedio de cada trozo discontinuo en la curva de luz
for j in range(len(ejey1)-1):
    dif = ejey1[j+1] - ejey1[j]
    if dif > 1500 or dif < -1500:
        for k in range(j-uind):
            suma = suma + ejey1[k+uind]  
        prom = suma / (j-uind)
        sumaprom = sumaprom + prom
        numprom = numprom + 1
        uind = j
        
print(sumaprom)
print(numprom)

gprom = sumaprom/numprom
print(gprom)

uind = 0
suma = 0
prom = 0
dif = 0

#restamos a cada valor (punto) en el gráfico la diferencia entre el promedio de cada trozo y el promedio general para
#llevar los puntos a un mismo nivel. Esto corresponde a la parte 5 de la tarea.
for j in range(len(ejey1)-1):
    dif = ejey1[j+1] - ejey1[j]
    if dif > 2000 or dif < -2000:
        for k in range(j-uind):
            suma = suma + ejey1[k+uind]  
        prom = suma / (j-uind)
        if prom < (gprom-prom):
            for l in range(j-uind):
                ejey1[l+uind] = ejey1[l+uind] - (gprom-prom)
        if prom > (gprom-prom):
            for l in range(j-uind):
                ejey1[l+uind] = (gprom-prom) - ejey1[l+uind]
        uind = j

#graficamos
fig, axis = plt.subplots(figsize=(8,6))
axis.plot(ejex1,ejey1,'r.',alpha=0.1)
plt.ylim(-3.41e9, -3.43e9)
axis.set_xlabel('Tiempo')
axis.set_ylabel('Flujo')
plt.show()


85691566916.9
25
3427662676.68

No se por qué no me funciona :(

Abajo se repite el procedimiento para las otras dos estrellas.


In [2]:
star2 = client.star(4348593)

curva2 = star2.get_light_curves(short_cadence=False)

time2, flux2, ferr2, quality2 = [], [], [], []

for lc in curva2:
    with lc.open() as f:
        hdu_data = f[1].data
        times2 = hdu_data["time"]
        pdc_fluxes2 = hdu_data["pdcsap_flux"]
        qualities2 = hdu_data["sap_quality"]
        #quitamos los elementos que sean "nan"
        idx2 = np.isnan(pdc_fluxes2)
        time2.append(times2[~idx2])
        flux2.append(pdc_fluxes2[~idx2])
        quality2.append(qualities2[~idx2])

ejex2 = np.array([])
ejey2 = np.array([])

for i in range(len(time2)):
    ejex2 = np.append(ejex2,time2[i])
    ejey2 = np.append(ejey2,flux2[i])
    
sumaprom = 0
numprom = 0
uind = 0
suma = 0
prom = 0
dif = 0

for j in range(len(ejey2)-1):
    dif = ejey2[j+1] - ejey2[j]
    if dif > 1500 or dif < -1500:
        for k in range(j-uind):
            suma = suma + ejey2[k+uind]  
        prom = suma / (j-uind)
        sumaprom = sumaprom + prom
        numprom = numprom + 1
        uind = j
        
print(sumaprom)
print(numprom)

gprom = sumaprom/numprom
print(gprom)

uind = 0
suma = 0
prom = 0
dif = 0

for j in range(len(ejey2)-1):
    dif = ejey2[j+1] - ejey2[j]
    if dif > 2000 or dif < -2000:
        for k in range(j-uind):
            suma = suma + ejey2[k+uind]  
        prom = suma / (j-uind)
        if prom < (gprom-prom):
            for l in range(j-uind):
                ejey2[l+uind] = ejey2[l+uind] - (gprom-prom)
        if prom > (gprom-prom):
            for l in range(j-uind):
                ejey2[l+uind] = (gprom-prom) - ejey2[l+uind]
        uind = j

fig, axis = plt.subplots(figsize=(8,6))
axis.plot(ejex2,ejey2,'r.',alpha=0.1)
plt.ylim(-0.184e11,-0.18e11)
axis.set_xlabel('Tiempo')
axis.set_ylabel('Flujo')
plt.show()


4.77381372979e+12
260
18360822037.7

In [3]:
star3 = client.star(9469165)

curva3 = star3.get_light_curves(short_cadence=False)

time3, flux3, ferr3, quality3 = [], [], [], []

for lc in curva3:
    with lc.open() as f:
        hdu_data = f[1].data
        times3 = hdu_data["time"]
        pdc_fluxes3 = hdu_data["pdcsap_flux"]
        qualities3 = hdu_data["sap_quality"]
        #quitamos los elementos que sean "nan"
        idx3 = np.isnan(pdc_fluxes3)
        time3.append(times3[~idx3])
        flux3.append(pdc_fluxes3[~idx3])
        quality3.append(qualities3[~idx3])

ejex3 = np.array([])
ejey3 = np.array([])

for i in range(len(time3)):
    ejex3 = np.append(ejex3,time3[i])
    ejey3 = np.append(ejey3,flux3[i])

sumaprom = 0
numprom = 0
uind = 0
suma = 0
prom = 0
dif = 0

for j in range(len(ejey3)-1):
    dif = ejey3[j+1] - ejey3[j]
    if dif > 1500 or dif < -1500:
        for k in range(j-uind):
            suma = suma + ejey3[k+uind]  
        prom = suma / (j-uind)
        sumaprom = sumaprom + prom
        numprom = numprom + 1
        uind = j
        
print(sumaprom)
print(numprom)

gprom = sumaprom/numprom
print(gprom)

uind = 0
suma = 0
prom = 0
dif = 0

for j in range(len(ejey3)-1):
    dif = ejey3[j+1] - ejey3[j]
    if dif > 2000 or dif < -2000:
        for k in range(j-uind):
            suma = suma + ejey3[k+uind]  
        prom = suma / (j-uind)
        if prom < (gprom-prom):
            for l in range(j-uind):
                ejey3[l+uind] = ejey3[l+uind] - (gprom-prom)
        if prom > (gprom-prom):
            for l in range(j-uind):
                ejey3[l+uind] = (gprom-prom) - ejey3[l+uind]
        uind = j

fig, axis = plt.subplots(figsize=(8,6))
axis.plot(ejex3,ejey3,'r.',alpha=0.1)
plt.ylim(-1.545e9,-1.534e9)
axis.set_xlabel('Tiempo')
axis.set_ylabel('Flujo')
plt.show()


32449851867.7
21
1545231041.32

3.- Diagrama flujo versus fase


Tomamos la curva de luz de KIC5520878 y la reducimos a solo un periodo. Cada periodo tiene 0.269 dias.


In [10]:
star = client.star(5520878)

curva = star.get_light_curves(short_cadence=False)

time, flux, ferr, quality = [], [], [], []

for lc in curva:
    with lc.open() as f:
        hdu_data = f[1].data
        times = hdu_data["time"]
        pdc_fluxes = hdu_data["pdcsap_flux"]
        qualities = hdu_data["sap_quality"]
        #quitamos los elementos que sean "nan"
        idx = np.isnan(pdc_fluxes)
        time.append(times[~idx])
        flux.append(pdc_fluxes[~idx])
        quality.append(qualities[~idx])

ejex = np.array([])
ejey = np.array([])

for i in range(len(time3)):
    ejex = np.append(ejex,time[i])
    ejey = np.append(ejey,flux[i])

#graficamos los datos tal como los recibimos
fig, axis = plt.subplots(figsize=(8,6))
axis.plot(ejex,ejey,'r.',alpha=0.1)
plt.xlim(200,220)
axis.set_xlabel('Tiempo')
axis.set_ylabel('Flujo')
plt.show()


Ahora rellenamos con los puntos para llevarlo al continuo.


In [13]:
ejexn = np.array([])
ejeyn = np.array([])

for t in range(len(ejex)-1):
    if ejex[t]>200 and ejex[t]<220:
        ejexn = np.append(ejexn,ejex[t])
        ejeyn = np.append(ejeyn,ejey[t])

print(ejexn[10])
print(ejexn[22])

#se tomó ese promedio viendo la diferencia entre dos cimas en el gráfico de arriba
print("El periodo aproximado segun los datos es:", ejexn[22]-ejexn[10], "que es bastante próximo a lo de la literatura")

#Ahora se completa el diagrama"
for t in range(len(ejexn)-1):
    if ejexn[t]>0 and ejexn[t]<20:
        ejexn = np.append(ejexn,ejexn[t]+0,269)
        ejeyn = np.append(ejeyn,ejeyn[t])

fig, axis = plt.subplots(figsize=(8,6))
axis.plot(ejexn,ejeyn,'g.',alpha=0.1)
plt.xlim(219.462,220)
axis.set_xlabel('Tiempo')
axis.set_ylabel('Flujo')
plt.show()


200.212278005
200.47791575
El periodo aproximado segun los datos es: 0.265637745411 que es bastante próximo a lo de la literatura

4.- Comparando con parámetros estelares


Tomamos


In [ ]: